// implements visitor pattern.
// In fact, visitor pattern is unrelated to 'visitor'.
// They are just a seperation of operation from underlying data structure.
// Or, they are just an implementation of double dispatching.

#pragma once
